package com.lh.jianzhioffer.专项练习.栈;

import java.util.Stack;

/**
 * @author: linghao
 * @since: 2023/3/28
 *
 * 给定一个整数数组 asteroids，表示在同一行的小行星。
 *
 * 对于数组中的每一个元素，其绝对值表示小行星的大小，正负表示小行星的移动方向（正表示向右移动，负表示向左移动）。每一颗小行星以相同的速度移动。
 *
 * 找出碰撞后剩下的所有小行星。碰撞规则：两个行星相互碰撞，较小的行星会爆炸。如果两颗行星大小相同，则两颗行星都会爆炸。两颗移动方向相同的行星，永远不会发生碰撞
 *
 */
public class 小行星碰撞037 {

    public int[] asteroidCollision(int[] asteroids) {
        Stack<Integer> stack = new Stack<>();
        for(int i : asteroids){
            boolean alive = true;
            while (alive && i<0 && !stack.isEmpty() && stack.peek()>0){
                alive = stack.peek() < -i;
                if(stack.peek() <= -i){
                    stack.pop();
                }
            }
            if(alive){
                stack.push(i);
            }
        }

        int[] ints = new int[stack.size()];
        for(int i=stack.size()-1;i>=0;i--){
            ints[i] = stack.pop();
        }
        return ints;
    }
}
